#include<iostream>
using namespace std;
const int MAXN = 1e6 + 5;

struct Node{
    int l, r;
}t[MAXN];

int ans = 0;

void dfs(int u, int depth) {
    if(t[u].l == 0 && t[u].r == 0) {
        ans = max(ans, depth);
        return;
    }
    if(t[u].l != 0) dfs(t[u].l, depth + 1);
    if(t[u].r != 0) dfs(t[u].r, depth + 1);
}

int main() {
    int n;
    cin >> n;
    if(n == 0) {
        cout << 0 << endl;
        return 0;
    }
    for(int i = 1; i <= n; i++)
        cin >> t[i].l >> t[i].r;
    dfs(1, 1);
    cout << ans << endl;

    return 0;
} 